/**
 * MIT License
 * 
 * Copyright (c) 2024 - present @ ebraid
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

#ifndef __EB_GPIO_PIN_H__
#define __EB_GPIO_PIN_H__


#define	      IO_PA0	                     0
#define	      IO_PA1	                     1
#define	      IO_PA2	                     2
#define	      IO_PA3	                     3
#define	      IO_PA4	                     4
#define	      IO_PA5	                     5
#define	      IO_PA6	                     6
#define	      IO_PA7	                     7
#define	      IO_PA8	                     8
#define	      IO_PA9	                     9
#define	      IO_PA10	                     10
#define	      IO_PA11	                     11
#define	      IO_PA12	                     12
#define	      IO_PA13	                     13
#define	      IO_PA14	                     14
#define	      IO_PA15	                     15
#define	      IO_PA16	                     16
#define	      IO_PA17	                     17
#define	      IO_PA18	                     18
#define	      IO_PA19	                     19
#define	      IO_PA20	                     20
#define	      IO_PA21	                     21
#define	      IO_PA22	                     22
#define	      IO_PA23	                     23
#define	      IO_PA24	                     24
#define	      IO_PA25	                     25
#define	      IO_PA26	                     26
#define	      IO_PA27	                     27
#define	      IO_PA28	                     28
#define	      IO_PA29	                     29
#define	      IO_PA30	                     30
#define	      IO_PA31	                     31
#define	      IO_PB0	                     32
#define	      IO_PB1	                     33
#define	      IO_PB2	                     34
#define	      IO_PB3	                     35
#define	      IO_PB4	                     36
#define	      IO_PB5	                     37
#define	      IO_PB6	                     38
#define	      IO_PB7	                     39
#define	      IO_PB8	                     40
#define	      IO_PB9	                     41
#define	      IO_PB10	                     42
#define	      IO_PB11	                     43
#define	      IO_PB12	                     44
#define	      IO_PB13	                     45
#define	      IO_PB14	                     46
#define	      IO_PB15	                     47
#define	      IO_PB16	                     48
#define	      IO_PB17	                     49
#define	      IO_PB18	                     50
#define	      IO_PB19	                     51
#define	      IO_PB20	                     52
#define	      IO_PB21	                     53
#define	      IO_PB22	                     54
#define	      IO_PB23	                     55
#define	      IO_PB24	                     56
#define	      IO_PB25	                     57
#define	      IO_PB26	                     58
#define	      IO_PB27	                     59
#define	      IO_PB28	                     60
#define	      IO_PB29	                     61
#define	      IO_PB30	                     62
#define	      IO_PB31	                     63
#define		  IO_PC0                        64                     
#define		  IO_PC1                        65
#define		  IO_PC2                        66
#define		  IO_PC3                        67
#define		  IO_PC4                        68
#define		  IO_PC5                        69
#define		  IO_PC6                        70
#define		  IO_PC7                        71
#define		  IO_PC8                        72
#define		  IO_PC9                        73
#define		  IO_PC10                       74
#define		  IO_PC11                       75
#define		  IO_PC12                       76
#define		  IO_PC13                       77
#define		  IO_PC14                       78
#define		  IO_PC15                       79
#define		  IO_PC16                       80
#define		  IO_PC17                       81
#define		  IO_PC18                       82
#define		  IO_PC19                       83
#define		  IO_PC20                       84
#define		  IO_PC21                       85
#define		  IO_PC22                       86
#define		  IO_PC23                       87
#define		  IO_PC24                       88
#define		  IO_PC25                       89
#define		  IO_PC26                       90
#define		  IO_PC27                       91
#define		  IO_PC28                       92
#define		  IO_PC29                       93
#define		  IO_PC30                       94
#define		  IO_PC31                       95
#define		  IO_PD0                        96
#define		  IO_PD1                        97
#define		  IO_PD2                        98
#define		  IO_PD3                        99
#define		  IO_PD4                        100
#define		  IO_PD5                        101
#define		  IO_PD6                        102
#define		  IO_PD7                        103
#define		  IO_PD8                        104
#define		  IO_PD9                        105
#define		  IO_PD10                       106
#define		  IO_PD11                       107
#define		  IO_PD12                       108
#define		  IO_PD13                       109
#define		  IO_PD14                       110
#define		  IO_PD15                       111
#define		  IO_PD16                       112
#define		  IO_PD17                       113
#define		  IO_PD18                       114
#define		  IO_PD19                       115
#define		  IO_PD20                       116
#define		  IO_PD21                       117
#define		  IO_PD22                       118
#define		  IO_PD23                       119
#define		  IO_PD24                       120
#define		  IO_PD25                       121
#define		  IO_PD26                       122
#define		  IO_PD27                       123
#define		  IO_PD28                       124
#define		  IO_PD29                       125
#define		  IO_PD30                       126
#define		  IO_PD31                       127
#define		  IO_PE0                        128
#define		  IO_PE1                        129
#define		  IO_PE2                        130
#define		  IO_PE3                        131
#define		  IO_PE4                        132
#define		  IO_PE5                        133
#define		  IO_PE6                        134
#define		  IO_PE7                        135
#define		  IO_PE8                        136
#define		  IO_PE9                        137
#define		  IO_PE10                       138
#define		  IO_PE11                       139
#define		  IO_PE12                       140
#define		  IO_PE13                       141
#define		  IO_PE14                       142
#define		  IO_PE15                       143
#define		  IO_PE16                       144
#define		  IO_PE17                       145
#define		  IO_PE18                       146
#define		  IO_PE19                       147
#define		  IO_PE20                       148
#define		  IO_PE21                       149
#define		  IO_PE22                       150
#define		  IO_PE23                       151
#define		  IO_PE24                       152
#define		  IO_PE25                       153
#define		  IO_PE26                       154
#define		  IO_PE27                       155
#define		  IO_PE28                       156
#define		  IO_PE29                       157
#define		  IO_PE30                       158
#define		  IO_PE31                       159
#define		  IO_PF0                        160
#define		  IO_PF1                        161
#define		  IO_PF2                        162
#define		  IO_PF3                        163
#define		  IO_PF4                        164
#define		  IO_PF5                        165
#define		  IO_PF6                        166
#define		  IO_PF7                        167
#define		  IO_PF8                        168
#define		  IO_PF9                        169
#define		  IO_PF10                       170
#define		  IO_PF11                       171
#define		  IO_PF12                       172
#define		  IO_PF13                       173
#define		  IO_PF14                       174
#define		  IO_PF15                       175
#define		  IO_PF16                       176
#define		  IO_PF17                       177
#define		  IO_PF18                       178
#define		  IO_PF19                       179
#define		  IO_PF20                       180
#define		  IO_PF21                       181
#define		  IO_PF22                       182
#define		  IO_PF23                       183
#define		  IO_PF24                       184
#define		  IO_PF25                       185
#define		  IO_PF26                       186
#define		  IO_PF27                       187
#define		  IO_PF28                       188
#define		  IO_PF29                       189
#define		  IO_PF30                       190
#define		  IO_PF31                       191
#define		  IO_PG0                        192
#define		  IO_PG1                        193
#define		  IO_PG2                        194
#define		  IO_PG3                        195
#define		  IO_PG4                        196
#define		  IO_PG5                        197
#define		  IO_PG6                        198
#define		  IO_PG7                        199
#define		  IO_PG8                        200
#define		  IO_PG9                        201
#define		  IO_PG10                       202
#define		  IO_PG11                       203
#define		  IO_PG12                       204
#define		  IO_PG13                       205
#define		  IO_PG14                       206
#define		  IO_PG15                       207
#define		  IO_PG16                       208
#define		  IO_PG17                       209
#define		  IO_PG18                       210
#define		  IO_PG19                       211
#define		  IO_PG20                       212
#define		  IO_PG21                       213
#define		  IO_PG22                       214
#define		  IO_PG23                       215
#define		  IO_PG24                       216
#define		  IO_PG25                       217
#define		  IO_PG26                       218
#define		  IO_PG27                       219
#define		  IO_PG28                       220
#define		  IO_PG29                       221
#define		  IO_PG30                       222
#define		  IO_PG31                       223
#define		  IO_PH0                        224
#define		  IO_PH1                        225
#define		  IO_PH2                        226
#define		  IO_PH3                        227
#define		  IO_PH4                        228
#define		  IO_PH5                        229
#define		  IO_PH6                        230
#define		  IO_PH7                        231
#define		  IO_PH8                        232
#define		  IO_PH9                        233
#define		  IO_PH10                       234
#define		  IO_PH11                       235
#define		  IO_PH12                       236
#define		  IO_PH13                       237
#define		  IO_PH14                       238
#define		  IO_PH15                       239
#define		  IO_PH16                       240
#define		  IO_PH17                       241
#define		  IO_PH18                       242
#define		  IO_PH19                       243
#define		  IO_PH20                       244
#define		  IO_PH21                       245
#define		  IO_PH22                       246
#define		  IO_PH23                       247
#define		  IO_PH24                       248
#define		  IO_PH25                       249
#define		  IO_PH26                       250
#define		  IO_PH27                       251
#define		  IO_PH28                       252
#define		  IO_PH29                       253
#define		  IO_PH30                       254
#define		  IO_PH31                       255
#define		  IO_PI0                        256
#define		  IO_PI1                        257
#define		  IO_PI2                        258
#define		  IO_PI3                        259
#define		  IO_PI4                        260
#define		  IO_PI5                        261
#define		  IO_PI6                        262
#define		  IO_PI7                        263
#define		  IO_PI8                        264
#define		  IO_PI9                        265
#define		  IO_PI10                       266
#define		  IO_PI11                       267
#define		  IO_PI12                       268
#define		  IO_PI13                       269
#define		  IO_PI14                       270
#define		  IO_PI15                       271
#define		  IO_PI16                       272
#define		  IO_PI17                       273
#define		  IO_PI18                       274
#define		  IO_PI19                       275
#define		  IO_PI20                       276
#define		  IO_PI21                       277
#define		  IO_PI22                       278
#define		  IO_PI23                       279
#define		  IO_PI24                       280
#define		  IO_PI25                       281
#define		  IO_PI26                       282
#define		  IO_PI27                       283
#define		  IO_PI28                       284
#define		  IO_PI29                       285
#define		  IO_PI30                       286
#define		  IO_PI31                       287
#define		  IO_PJ0                        288
#define		  IO_PJ1                        289
#define		  IO_PJ2                        290
#define		  IO_PJ3                        291
#define		  IO_PJ4                        292
#define		  IO_PJ5                        293
#define		  IO_PJ6                        294
#define		  IO_PJ7                        295
#define		  IO_PJ8                        296
#define		  IO_PJ9                        297
#define		  IO_PJ10                       298
#define		  IO_PJ11                       299
#define		  IO_PJ12                       300
#define		  IO_PJ13                       301
#define		  IO_PJ14                       302
#define		  IO_PJ15                       303
#define		  IO_PJ16                       304
#define		  IO_PJ17                       305
#define		  IO_PJ18                       306
#define		  IO_PJ19                       307
#define		  IO_PJ20                       308
#define		  IO_PJ21                       309
#define		  IO_PJ22                       310
#define		  IO_PJ23                       311
#define		  IO_PJ24                       312
#define		  IO_PJ25                       313
#define		  IO_PJ26                       314
#define		  IO_PJ27                       315
#define		  IO_PJ28                       316
#define		  IO_PJ29                       317
#define		  IO_PJ30                       318
#define		  IO_PJ31                       319


#define       IO_TO_PORT(x)                 (x >> 5)
#define       IO_TO_PIN(x)                  (x & 0x1F)


#define       IO_OUT                        1
#define       IO_IN                         0

#define       IO_HIGH                       1
#define       IO_LOW                        0


#define       IO_INVALID_DIR                0xF
#define       IO_INVALID_VAL                0xF


#endif //!__EB_GPIO_PIN_H__
